package com.example.week9_advanceui;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;

public class SpinnerActivity extends AppCompatActivity {
    // 定义学习场所下拉列表需要显示的文本数组,文本数组可以直接作为 Adapter 的数据来源
    private String[] learningSiteArray = {"逸夫图书馆",
            "承先图书馆", "综合楼", "四教", "五教", "六教"};
    // 定义运动场所对话框列表需要显示的文本数组,该数组内容将由资源文件填充
    private String[] playSiteArray;
    //用于显示结果的文本框组件
    private TextView resultText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_spinner);
        //初始化组件
        resultText = findViewById(com.example.week9_advanceui.R.id.sp_result);
        //初始化下拉模式的列表框
        intiDropdownSpinner();
        //初始化对话框样式的列表框
        intiDialogSpinner();
    }
    //初始化下拉模式的列表框
    private void intiDropdownSpinner() {
        //初始化：从布局文件中获取名叫 sp_dropdown 的下拉框
        Spinner sp_dropdown = findViewById(R.id.sp_dropdown);
        // 设置下拉框的标题（对话框模式才显示标题，下拉模式不显示标题）
        sp_dropdown.setPrompt("请选择学习场所");
        // 先声明一个下拉列表的数组适配器，指定下拉列表
        ArrayAdapter<String> learningSiteAdapter = new ArrayAdapter<String>(this,
                R.layout.item_select, learningSiteArray);
/* 上面的构造方法指定列表数据来自数组 learningSiteArray，用布局文件 item_select.xml 显示每一行
public ArrayAdapter (Context context, int resource, T[] objects)
参数：
context Context: The current context. This value cannot be null.
resource int: The resource ID for a layout file containing a TextView to use
when instantiating views. (用于显示列表项中每一行的布局文件，其中包含一个 TextView)
objects T: The objects to represent in the ListView. This value cannot be null.
* 这个构造函数将导致底层数据集合是不可变的，因此 clear()等方法将抛出异常。
*/
        sp_dropdown.setAdapter(learningSiteAdapter); // 设置下拉框的数组适配器
        sp_dropdown.setSelection(0); // 设置下拉框默认显示第一项
// 给下拉框设置选择监听器，一旦用户选中某一项，就触发监听器的 onItemSelected 方法
        sp_dropdown.setOnItemSelectedListener(onItemSelectedListener);
    }
    //初始化对话框样式的列表框
    private void intiDialogSpinner() {
        //从数组资源文件 arrays.xml 中获得数组元素
        //请结合前面对字符资源文件、尺寸资源文件的体验，说出这样做的好处
        playSiteArray = getResources().getStringArray(R.array.palySites);
        // 从布局文件中获取名叫 sp_dialog 的下拉框
        Spinner sp_dialog = findViewById(R.id.sp_dialog);
        // 设置下拉框的标题。对话框模式才显示标题，下拉模式不显示标题
        sp_dialog.setPrompt("请选择运动场所");
        // 声明一个下拉列表的数组适配器
        //请对照 intiDropdownSpinner()注释中对构造方法的解释，读懂代码
        ArrayAdapter<String> palySiteAdapter = new ArrayAdapter<String>(this,
                R.layout.item_select, playSiteArray);
        sp_dialog.setAdapter(palySiteAdapter); // 设置下拉框的数组适配器
        // 给下拉框设置选择监听器，一旦用户选中某一项，就触发监听器的 onItemSelected 方法
        sp_dialog.setOnItemSelectedListener(onItemSelectedListener);
    }
        // 定义一个选择监听器，它实现了接口 OnItemSelectedListener
    private AdapterView.OnItemSelectedListener onItemSelectedListener =
            new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l)
                {
                    // 选择事件的处理方法，其中 position 代表选择项的序号
                    switch (adapterView.getId()) {
                        case R.id.sp_dropdown:
                            resultText.setText("学习在" + learningSiteArray[position]);
                            break;
                        case R.id.sp_dialog:
                            resultText.setText("运动在" + playSiteArray[position]);
                            break;
                    }
                }
                // 未选择时的处理方法，通常无需关注
                @Override
                public void onNothingSelected(AdapterView<?> adapterView) {

                }
            };
}